require 'sketchup.rb'
module AMTF_mixin
  # def 设置常用对象
  #   @model = Sketchup.active_model
  #   @entities = @model.active_entities
  #   @selection = @model.selection
  #   # p 'AMTF_mixin:成功'
  # end

  def 设置常用对象
    @model = Sketchup.active_model
    @entities = @model.active_entities
    @selection = @model.selection

    if @entities[0].parent.kind_of? Sketchup::Model
      @编辑中组件名称=nil
    else
      @编辑中组件=@entities[0].parent
      @编辑中组件名称=@编辑中组件.name
    end

    @编辑中tr=@model.edit_transform
    @原点 = Geom::Point3d.new(0,0,0)
    @编辑中局部原点=@原点.transform(@编辑中tr)
    @definitions = @model.definitions

  end
  def get_dir
    p "hello AF!"
    file = __FILE__.dup
    file.force_encoding("UTF-8")
    if file.respond_to?(:force_encoding)
      f = File.basename(file, '.*').freeze
      p "File.basename="+f
      r = File.dirname(file).freeze+"/组件模板"
      p "File.dirname="+r
      return r
      # p "File.join(r,f)="+File.join(r,f)
      # return File.join(r,f)
    end
  end
  def 清除未使用
    # p "hello 清除未使用!"
    设置常用对象
    # @model = Sketchup.active_model
    之前数量=@model.definitions.length
    p  "现有definitions数量："+@model.definitions.length.to_s
    @model.definitions.purge_unused
    之后数量=@model.definitions.length
    清除组件数量=之前数量-之后数量
    p  "清除未使用后，剩下definitions数量：" + @model.definitions.length.to_s

    之前数量=@model.materials.length
    @model.materials.purge_unused
    之后数量=@model.materials.length
    清除材料数量=之前数量-之后数量
    Sketchup::set_status_text "清除组件:"+清除组件数量.to_s+"  清除材质："+清除材料数量.to_s


  end

  def 含子组件?(e)
    entities=e.definition.entities
    entities.each {|e|
      if ( e.is_a?( Sketchup::ComponentInstance ) || e.is_a?( Sketchup::Group ))
        return true
      end
    }
    return false
  end

  def 炸开所有子组件主体(e,当前层级)
    @层级h[e]=当前层级
    entities=e.definition.entities
    entities.each {|e|
      if ( e.is_a?( Sketchup::ComponentInstance ) || e.is_a?( Sketchup::Group ))
        当前层级+=1
        炸开所有子组件主体(e,当前层级)
      end
    }
    #递归到底，开始返回
    if @层级h[e]>0
      提示信息="炸开:"+e.definition.name
      p 提示信息
      发送提示信息(提示信息)
      e.explode
    end
  end
  def 发送提示信息(提示信息)
    # p 提示信息=="方法完成"
    if 提示信息=="方法完成"
      上个被调用方法名=caller_locations(1,1)[0].label
      # p 上个被调用方法名
      提示信息=上个被调用方法名+"  完成!"
    else
      提示信息=提示信息
    end
    Sketchup::set_status_text 提示信息
  end
  def 文件改名(替换字符)
    # chosen_folder = UI.select_directory(title: "选文件夹",directory: "d:")
    chosen_folder = UI.select_directory(title: "请选择 拟改名文件所在 文件夹")
  end

end
